//
//  WBStatusListViewModel.swift
//  微博
//
//  Created by 蒋丙爽 on 2021/4/30.
//  Copyright © 2021 Jiang. All rights reserved.
//

import Foundation
import YYModel

//微博数据列表视图模型

/*
 父类的选择:
 - 如果类需要使用 ‘KVC’ 或者 字典转模型框架设置对象值,类就需要继承自 NSObject
 - 如果类只是包装一些代码逻辑(写了一些函数),可以不用任何父类,好处:更加轻量级
 - 提示: 如果用OC 写,一律都继承自NSObject 即可
 
 使用:负责微博的数据处理
 1.字典转模型
 2.下拉、上拉刷新数据处理
 */


//上拉刷新最大尝试次数
private let maxPullupTryTimes = 3

class WBStatusListViewModel {
    
    //微博模型数组懒加载
    lazy var statusList = [WBStatus]()
    
    //上拉刷新错误次数
    private var pullupErrorTimes = 0
    
    //加载微博列表
    //pullup:是否上拉刷新标记
    //completion : 完成回调1.[是否成功]2.[是否刷新表格]
    func loadStatus(pullup:Bool,completion:@escaping(_ isSuccess:Bool,_ shouldRefresh:Bool)->()) {
        
        //判断是否是上拉刷新,同事检查刷新错误
        if pullup && pullupErrorTimes > maxPullupTryTimes {
            completion(true,false)
            return;
        }
        
        
        //since_id 取出数组中第一条微博的 id
        let since_id = pullup ? 0 : (self.statusList.first?.id ?? 0)
        print("取出数组中第一条微博的sinceid-\(since_id)")
        //上拉刷新,取出数组的最后一条微博的id
        let max_id = pullup ? (statusList.last?.id ?? 0) : 0
        print("上拉刷新,取出数组的最后一条微博的id-\(max_id)")
        
        WBNetworkManager.shared.statusList(since_id: since_id, max_id: max_id) { list, isSuccess in
            print("list---->\(list)")
            
            //1.字典转模型
            guard let array = NSArray.yy_modelArray(with: WBStatus.self, json: list ?? []) as? [WBStatus] else {//字典转模型失败会进来
                completion(isSuccess,false)
                return; //没有值就return
            }
            
            print("刷新到 \(array.count) 条数据")
            
            //2.拼接数据
            //下拉刷新,硬该将结果数组拼接在数组前面
            if pullup {//上拉刷新加载更多
                //上拉刷新结束后,将结果拼接在数组的末尾
                self.statusList += array
            }else {//下拉刷新最新数据
                self.statusList = array + self.statusList
            }
            
            //3.判断上拉刷新的数据量
            if pullup && array.count == 0 {
                self.pullupErrorTimes += 1
                completion(isSuccess,false)
            }else {
                //4.完成回调
                completion(isSuccess,true)
            }
            
            
            
            
            
            
            
        }
        
        
        
//        WBNetworkManager.shared.statusList(since_id: 0,max_id: 0) { (list, isSuccess) in
//            print("list---->\(list)")
//            
//            //1.字典转模型
//            guard let array = NSArray.yy_modelArray(with: WBStatus.self, json: list ?? []) as? [WBStatus] else {
//                completion(isSuccess)
//                return; //没有值就return
//            }
//            
//            print("刷新到 \(array.count) 条数据")
//            
//            //2.拼接数据
//            //下拉刷新,硬该将结果数组拼接在数组前面
//            self.statusList = array + self.statusList
//            
//            //3.完成回调
//            completion(isSuccess)
//        }
        
    }
    
}
